In video coder/decoder systems, a video coder may code a source video sequence into a coded representation that has a smaller bit rate than does the source video and, thereby may achieve data compression. The coder may code processed video data according to any of a variety of different coding techniques to achieve compression. One common technique for data compression uses predictive coding techniques (e.g., temporal/motion predictive coding). For example, some frames in a video stream may be coded independently (I-frames) and some other frames (e.g., P-frames or B-frames) may be coded using other frames as reference frames. P-frames may be coded with reference to a single previously coded frame (P-frame) and B-frames may be coded with reference to a pair of previously-coded frames, typically a frame that occurs prior to the B-frame in display order and another frame that occurs subsequently to the B-frame in display order. The previously-coded frames that support the P- and B-coding modes are called “reference frames.” The resulting compressed sequence (bit stream) may be transmitted to a decoder via a channel. To recover the video data, the bit stream may be decompressed at the decoder, by inverting the coding processes performed by the coder, yielding a received decoded video sequence.
The coder and decoder both decode coded reference frames and cache them locally. Absent transmission errors, the reference picture caches at both the coder and decoder should be synchronized. The reference picture caches have limited depth and, when the caches are filled to capacity, a new reference picture evicts an older reference picture according to a predetermined eviction scheme.
Better compression efficiency and coding quality can be achieved if reference frames can be selected that provide good matches to later-received frames from a video sequence. Conventional management processes do not always cause reference frames to be retained in caches that provide good prediction references for other frames. For example, in many coding environments, a video coder always keeps a predetermined number of most-recently coded reference frames. In video sequences with extremely low levels of motion, however, improved coding efficiency may be achieved by retaining reference frames older than the Nth most recently coded reference frames. In video sequences having high levels of motion, improved coding efficiency may be achieved by retaining younger reference frames within a reference picture cache, those temporally closest to new frames being coded. No known coding system adequately balances these competing interests.